﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using DTO;

namespace Persistence
{
    public class StudentController : PersonController
    {
        //Inserta un nuevo estudiante.
        public static long insertStudent(Student stu)
        {
            //Se le envia al metodo insertPerson como parametro, la instancia de Persona
            //y el nombre del procedimiento almacenado que se desea usar.
            MySqlCommand comm = insertPerson(stu, "proin_S");

            MySqlParameter outIdParam = new MySqlParameter("@vId", MySqlDbType.Int16)
            {
                Direction = ParameterDirection.Output
            };
            comm.Parameters.Add(outIdParam);

            //Se ejecuta el comando.
            DBConnection.getInstance().executeNonQueryCommand(comm);
            //Se devuelve el Id del estudiante creado.
            long id = long.Parse(outIdParam.Value.ToString());

            return id;
        }

        //Actualiza los datos de un estudiante.
        public static void updateStudent(Student stuUpdated)
        {
            Student pStuOriginal = getStudentById(stuUpdated.LngId);
            updatePerson(pStuOriginal, stuUpdated);
        }

        //Da baja logica a un estudiante en el sistema.
        public static void deleteStudent(long vId)
        {
            deletePerson(vId, "Student");
        }

        //Obtiene una lista de los estudiantes registrados y activos coincidentes con el criterio de busqueda.
        public static DataTable getStudentListBySearch(string vSearch)
        {
            DBConnection dbConn = DBConnection.getInstance();
            MySqlCommand cmd = dbConn.createCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "proout_ListS";
            cmd.Parameters.AddWithValue("@psearch", vSearch);

            DataTable dt = dbConn.executeSelectCommand(cmd);
            return dt;
        }

        //Obtiene la instancia de Estudiante correspondiente al Id ingresado como parametro.
        public static Student getStudentById(long vId)
        {
            Student stu = new Student();
            return (Student)getPersonById(vId, stu);
        }

        private static string truncate(string unSt, int maxLength)
        {
            return unSt.Length <= maxLength ? unSt : unSt.Substring(0, maxLength);
        } 
    }
}
